#ifndef MENSAJE_H
#define MENSAJE_H
#include <string>
#include <jsoncpp/json/json.h>
#include <stdint.h>
#include <sstream>
#include "Serializable.h"
#include "HMAC.h"
#include "Configuracion.h"

typedef uint32_t t_long_msg;

class Mensaje: public Serializable {
public:
    Mensaje();
    virtual ~Mensaje();
    /* Getters y Setters */
    void setData(Json::Value& data) {
        this->data=data;
    }
    Json::Value& getData() {
        return this->data;
    }
    void setKey(std::string key) {
        this->key=key;
    }
    std::string getKey() {
        return this->key;
    }
    std::string getFirma() {
        return this->firma;
    }
    std::string getJsonString();

    std::string generarFirma();

    std::string serializar();
    bool hidratar(std::string obj_serial);
    bool hidratar(char* msg_serial);

    std::string aString();

    void imprimir();

    void limpiar();

    Json::Value data;

private:
    std::string key;
    std::string firma;

    HMAC firmador;
};

#endif // MENSAJE_H
